<!--
 * @Author: your name
 * @Date: 2020-03-31 18:06:07
 * @LastEditTime: 2020-04-02 22:47:23
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \vue-imooc-ebook\src\components\ebook\EbookSettingProgress.vue
 -->
<template>
  <transition name="slide-up">
    <div class="setting-wrapper" v-show="menuVisible && settingVisible === 2">
      <div class="setting-progress">
        <div class="read-time-wrapper">
          <!-- 在mixin方法,获取阅读时间文本 -->
          <span class="read-time-text">{{getReadTimeText()}}</span>
          <span class="icon-forward"></span>
        </div>
        <div class="progress-wrapper">
          <div class="progress-icon-wrapper" @click="prevSection()">
            <span class="icon-back"></span>
          </div>
          <input class="progress" type="range"
                 max="100"
                 min="0"
                 step="1"
                 @change="onProgressChange($event.target.value)"
                 @input="onProgressInput($event.target.value)"
                 :value="progress"
                 :disabled="!bookAvailable"
                 ref="progress">
          <div class="progress-icon-wrapper" @click="nextSection()">
            <span class="icon-forward"></span>
          </div>
        </div>
        <div class="text-wrapper">
          <!-- getSectionName计算属性 mixin中-->
          <span class="progress-section-text">{{getSectionName}}</span>
          <span>({{bookAvailable ? progress + '%' : '加载中...'}})</span>
        </div>
      </div>
    </div>
  </transition>
</template>

<script>
  import { ebookMixin } from '../../utils/mixin'
  export default {
    mixins: [ebookMixin],
    methods: {
      // 表示进度条拖动松手以后的调用方法
      // @change事件，修改完成后触发的事件，即你点到那个进度后触发的，$event.target.value可以获取到最新的progress值。
      // @input是修改过程时触发的事件，即拖动滑块会触发(比如拖动滑块的时候，百分比进行变化)
      onProgressChange(progress) {
        console.log('progress', progress)
        this.setProgress(progress).then(() => {
          // progress的显示,渲染进度条
          this.displayProgress()
          // 进度条背景变化,拖动进度条后进度条左侧加深,表示已经读过
          this.updateProgressBg()
        })
      },
      // 表示拖动过程中的方法
      onProgressInput(progress) {
        // console.log('progress', progress)
        this.setProgress(progress).then(() => {
           // 进度条背景变化,拖动进度条后进度条左侧加深,表示已经读过
          this.updateProgressBg()
        })
      },
      // 用来展示当前进度所在的页面
      displayProgress() {
        // 通过百分比(作为小数)来获取定位数据cfi
        // console.log('调用displayProgress()')
        // 定位数据cfi.通过进度百分比获取cfi,才可以渲染电子书到指定位置
        // console.log('this.progress', this.progress)
        const cfi = this.currentBook.locations.cfiFromPercentage(this.progress / 100)
        console.log('cfi', cfi)
        // 渲染cfi,渲染电子书到指定页位置显示,在mixin中
        this.display(cfi)
        // this.currentBook.rendition.display(cfi).then(() => {
        //   this.refreshLocation()
        // })
      },
      // 进度条背景变化.拖动进度条完毕后，已经完了的进度，进度条亮度会加深,现获取进度条的ref="progress",获取到progress的dom
      updateProgressBg() {
        // console.log('调用updateProgressBg()')
        this.$refs.progress.style.backgroundSize = `${this.progress}% 100%`
      },
      // 返回上一章
      prevSection() {
        // console.log(this.bookAvailable)
        // console.log(this.section)
        // 必须大于0我们才能返回上一章
        if (this.section > 0 && this.bookAvailable) {
          // console.log('aa')
          this.setSection(this.section - 1).then(() => {
            // 对章节进行展示
            // console.log('aa')
            // 展示上一章的内容
            this.displaySection()
          })
        }
      },
      // 返回下一章
      nextSection() {
        // spine是章节的数目从0开始
        if (this.section < this.currentBook.spine.length - 1 && this.bookAvailable) {
          this.setSection(this.section + 1).then(() => {
            // 对章节进行展示
            this.displaySection()
          })
        }
      },
        // 对章节内容进行展示方法
      displaySection() {
            // 获取上一章的信息,调用book对象提供的一个section的API,可以将我们的section传递进去,就可以拿到上一章的信息
            const sectionInfo = this.currentBook.section(this.section)
            // section整数型,sectionInfo是一个对象
            console.log('sectionInfo', sectionInfo)
            if (sectionInfo && sectionInfo.href) {
              // 通过sectionInfo.href路径传入display()进行展示,在mixin,与展示某一页同一个display()方法
              this.display(sectionInfo.href)
              // 根据sectionInfo的herf展示章节内容
        //       this.currentBook.rendition.display(sectionInfo.href).then(() => {
        //         // 刷新当前的位置
        //         this.refreshLocation()
        // })
            }
      }
    },
    // 进度条初始状态设置d
    updated() {
      this.updateProgressBg()
    }
  }
</script>

<style lang="scss" rel="stylesheet/scss" scoped>
  @import "../../assets/styles/global";
  .setting-wrapper {
    position: absolute;
    bottom: px2rem(86);//48
    left: 0;
    z-index: 190;
    width: 100%;
    height: px2rem(220);//90
    background: white;
    box-shadow: 0 px2rem(-8) px2rem(8) rgba(0, 0, 0, .15);
     .setting-progress{
        position: relative;
        width: 100%;
        height: 100%;
        .read-time-wrapper {
          position: absolute;
          left: 0;
          top: 0;
          width: 100%;
          height: px2rem(80);//40
          font-size: px2rem(30);//12
          @include center;
        }
        .progress-wrapper {
          width: 100%;
          height: 100%;
          @include center;
          padding: 0 px2rem(20);//15
          box-sizing: border-box;
          .progress-icon-wrapper {
            font-size: px2rem(38);//20
          }
          .progress {
            width: 100%;
            -webkit-appearance: none;
            height: px2rem(2);
            // background: -webkit-linear-gradient(#999, #999) no-repeat, #ddd;
            // background-size: 0 100%!important;
            margin:0 px2rem(13);//10
            &:focus {
              outline: none;
            }
            &::-webkit-slider-thumb {
              -webkit-appearance: none;
              height: px2rem(20);//20
              width: px2rem(20);
              border-radius: 50%;
              background: white;
              box-shadow: 0 4px 4px 0 rgba(0, 0, 0, .15);
              border: px2rem(1) solid #ddd;
            }
          }
        }
        .text-wrapper {
          position: absolute;
          left: 0;
          bottom: px2rem(20);//10
          width: 100%;
          color: #333;
          font-size: px2rem(36);//12
          padding: 0 px2rem(15);//15
          box-sizing: border-box;
          // text-align: center;
          @include center;
          // 限定布局为一行显示
          .progress-section-text {
            @include ellipsis
          }
        }
      }
  }
</style>
